effects-as-data
Advanced tools
Comparing version 1.4.19 to 1.5.1
@@ -14,3 +14,3 @@ 'use strict'; | ||
describe.only('demo/misc.js', function () { | ||
describe('demo/misc.js', function () { | ||
describe('#singleLine', function () { | ||
@@ -17,0 +17,0 @@ it('handles it', testSingleLine(function () { |
@@ -12,4 +12,6 @@ 'use strict'; | ||
isSuccess = _require3.isSuccess, | ||
getSuccesses = _require3.getSuccesses, | ||
failure = _require3.failure, | ||
isFailure = _require3.isFailure; | ||
isFailure = _require3.isFailure, | ||
getFailures = _require3.getFailures; | ||
@@ -21,5 +23,7 @@ module.exports = { | ||
isSuccess: isSuccess, | ||
getSuccesses: getSuccesses, | ||
failure: failure, | ||
isFailure: isFailure | ||
isFailure: isFailure, | ||
getFailures: getFailures | ||
}; | ||
//# sourceMappingURL=index.js.map |
@@ -8,3 +8,4 @@ 'use strict'; | ||
toPromise = _require.toPromise, | ||
append = _require.append; | ||
append = _require.append, | ||
getFailures = _require.getFailures; | ||
@@ -16,5 +17,6 @@ var _require2 = require('./handle-actions'), | ||
var payload = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; | ||
var config = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | ||
var h1 = handleActions(run, actionHandlers); | ||
return runComplete(h1, fn, payload).then(prop('payload')); | ||
return runComplete(h1, fn, payload, config).then(prop('payload')); | ||
}; | ||
@@ -24,5 +26,6 @@ | ||
var payload = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; | ||
var config = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | ||
var g = fn(payload); | ||
return runner(handleActions, g, payload); | ||
return runner(handleActions, g, payload, config); | ||
}; | ||
@@ -37,3 +40,6 @@ | ||
var runner = function runner(handleActions, g, input, el) { | ||
var runner = function runner(handleActions, g, input) { | ||
var config = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | ||
var el = arguments[4]; | ||
var el1 = getExecutionLog(el); | ||
@@ -49,7 +55,24 @@ | ||
return handleActions(output).then(function (actionResults1) { | ||
handleFailedActions(actionResults1, el2, config); | ||
var actionResults2 = returnResultsAsArray ? actionResults1 : unwrapArgs(actionResults1); | ||
return runner(handleActions, g, actionResults2, el2); | ||
return runner(handleActions, g, actionResults2, config, el2); | ||
}); | ||
}; | ||
var handleFailedActions = function handleFailedActions(actionResults, el, config) { | ||
var onFailure = config.onFailure || function () {}; | ||
var failures = getFailures(actionResults); | ||
failures.forEach(function (f) { | ||
var error = f.error || {}; | ||
onFailure({ | ||
fn: config.name, | ||
log: el, | ||
errorMessage: error.message, | ||
errorName: error.name, | ||
errorStack: error.stack, | ||
error: error.toString() | ||
}); | ||
}); | ||
}; | ||
var nextOutput = function nextOutput(g, input) { | ||
@@ -56,0 +79,0 @@ var _g$next = g.next(input), |
@@ -46,2 +46,8 @@ 'use strict'; | ||
function getSuccesses(l) { | ||
return l.filter(function (p) { | ||
return p.success === true; | ||
}); | ||
} | ||
function failure(error) { | ||
@@ -58,2 +64,8 @@ return { | ||
function getFailures(l) { | ||
return l.filter(function (p) { | ||
return p.success === false; | ||
}); | ||
} | ||
var normalizeToSuccess = function normalizeToSuccess(p) { | ||
@@ -94,4 +106,6 @@ if (isProtocol(p)) return p; | ||
isSuccess: isSuccess, | ||
getSuccesses: getSuccesses, | ||
failure: failure, | ||
isFailure: isFailure, | ||
getFailures: getFailures, | ||
merge: merge, | ||
@@ -98,0 +112,0 @@ normalizeToSuccess: normalizeToSuccess, |
@@ -10,3 +10,5 @@ 'use strict'; | ||
isSuccess = _require.isSuccess, | ||
getSuccesses = _require.getSuccesses, | ||
isFailure = _require.isFailure, | ||
getFailures = _require.getFailures, | ||
normalizeToSuccess = _require.normalizeToSuccess, | ||
@@ -151,2 +153,11 @@ normalizeListToSuccess = _require.normalizeListToSuccess, | ||
describe('#getFailures', function () { | ||
it('should return all failures', function () { | ||
var list = [success(1), failure(1), success(2), failure(2)]; | ||
var actual = getSuccesses(list); | ||
var expected = [success(1), success(2)]; | ||
deepEqual(actual, expected); | ||
}); | ||
}); | ||
describe('#isFailure', function () { | ||
@@ -174,2 +185,11 @@ it('should return true if is failure object', function () { | ||
describe('#getFailures', function () { | ||
it('should return all failures', function () { | ||
var list = [failure(1), failure(2), success(), failure(2)]; | ||
var actual = getFailures(list); | ||
var expected = [failure(1), failure(2), failure(2)]; | ||
deepEqual(actual, expected); | ||
}); | ||
}); | ||
describe('#normalizeToSuccess', function () { | ||
@@ -176,0 +196,0 @@ it('should wrap value in success object', function () { |
{ | ||
"name": "effects-as-data", | ||
"version": "1.4.19", | ||
"version": "1.5.1", | ||
"description": "Express async workflows using pure functions.", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -208,1 +208,28 @@ # Effects as Data | ||
``` | ||
## Logging Action Failures | ||
Logging all action failures explicitly can add a lot of noise to your code. Effects-as-data provides an `onFailure` hook that will be called for each failing action with a detailed payload about the error: | ||
```js | ||
function onFailure (payload) { | ||
// payload: | ||
// { | ||
// fn: 'testFunction', | ||
// log: [ | ||
// [42, {type: 'noop'}], | ||
// [{success: true, payload: 'noop'}, {type: 'test'}] | ||
// ], | ||
// errorMessage: 'Oh No!', | ||
// errorName: 'TypeError', | ||
// errorStack: the stack trace, | ||
// error: the error object toString()'d | ||
// } | ||
log(payload) | ||
} | ||
return run(handlers, test, 42, { | ||
name: 'testFunction', | ||
onFailure | ||
}) | ||
``` |
@@ -7,3 +7,3 @@ const { singleLine } = require('./misc') | ||
describe.only('demo/misc.js', () => { | ||
describe('demo/misc.js', () => { | ||
describe('#singleLine', () => { | ||
@@ -10,0 +10,0 @@ it('handles it', testSingleLine(() => { |
@@ -6,4 +6,6 @@ const { run } = require('./run') | ||
isSuccess, | ||
getSuccesses, | ||
failure, | ||
isFailure | ||
isFailure, | ||
getFailures | ||
} = require('./util') | ||
@@ -16,4 +18,6 @@ | ||
isSuccess, | ||
getSuccesses, | ||
failure, | ||
isFailure | ||
isFailure, | ||
getFailures | ||
} |
@@ -6,14 +6,15 @@ const { | ||
toPromise, | ||
append | ||
append, | ||
getFailures | ||
} = require('./util') | ||
const { handleActions } = require('./handle-actions') | ||
const run = (actionHandlers, fn, payload = null) => { | ||
const run = (actionHandlers, fn, payload = null, config = {}) => { | ||
const h1 = handleActions(run, actionHandlers) | ||
return runComplete(h1, fn, payload).then(prop('payload')) | ||
return runComplete(h1, fn, payload, config).then(prop('payload')) | ||
} | ||
const runComplete = (handleActions, fn, payload = null) => { | ||
const runComplete = (handleActions, fn, payload = null, config = {}) => { | ||
let g = fn(payload) | ||
return runner(handleActions, g, payload) | ||
return runner(handleActions, g, payload, config) | ||
} | ||
@@ -26,3 +27,3 @@ | ||
const runner = (handleActions, g, input, el) => { | ||
const runner = (handleActions, g, input, config = {}, el) => { | ||
const el1 = getExecutionLog(el) | ||
@@ -34,7 +35,24 @@ let { output, done } = nextOutput(g, input) | ||
return handleActions(output).then((actionResults1) => { | ||
handleFailedActions(actionResults1, el2, config) | ||
const actionResults2 = returnResultsAsArray ? actionResults1 : unwrapArgs(actionResults1) | ||
return runner(handleActions, g, actionResults2, el2) | ||
return runner(handleActions, g, actionResults2, config, el2) | ||
}) | ||
} | ||
const handleFailedActions = (actionResults, el, config) => { | ||
const onFailure = config.onFailure || function () {} | ||
const failures = getFailures(actionResults) | ||
failures.forEach((f) => { | ||
const error = f.error || {} | ||
onFailure({ | ||
fn: config.name, | ||
log: el, | ||
errorMessage: error.message, | ||
errorName: error.name, | ||
errorStack: error.stack, | ||
error: error.toString() | ||
}) | ||
}) | ||
} | ||
const nextOutput = (g, input) => { | ||
@@ -41,0 +59,0 @@ let { value: output, done } = g.next(input) |
@@ -45,2 +45,6 @@ const { | ||
function getSuccesses (l) { | ||
return l.filter((p) => p.success === true) | ||
} | ||
function failure (error) { | ||
@@ -57,2 +61,6 @@ return { | ||
function getFailures (l) { | ||
return l.filter((p) => p.success === false) | ||
} | ||
const normalizeToSuccess = (p) => { | ||
@@ -93,4 +101,6 @@ if (isProtocol(p)) return p | ||
isSuccess, | ||
getSuccesses, | ||
failure, | ||
isFailure, | ||
getFailures, | ||
merge, | ||
@@ -97,0 +107,0 @@ normalizeToSuccess, |
@@ -8,3 +8,5 @@ const { | ||
isSuccess, | ||
getSuccesses, | ||
isFailure, | ||
getFailures, | ||
normalizeToSuccess, | ||
@@ -114,2 +116,11 @@ normalizeListToSuccess, | ||
describe('#getFailures', () => { | ||
it('should return all failures', () => { | ||
const list = [success(1), failure(1), success(2), failure(2)] | ||
const actual = getSuccesses(list) | ||
const expected = [success(1), success(2)] | ||
deepEqual(actual, expected) | ||
}) | ||
}) | ||
describe('#isFailure', () => { | ||
@@ -137,2 +148,11 @@ it('should return true if is failure object', () => { | ||
describe('#getFailures', () => { | ||
it('should return all failures', () => { | ||
const list = [failure(1), failure(2), success(), failure(2)] | ||
const actual = getFailures(list) | ||
const expected = [failure(1), failure(2), failure(2)] | ||
deepEqual(actual, expected) | ||
}) | ||
}) | ||
describe('#normalizeToSuccess', () => { | ||
@@ -139,0 +159,0 @@ it('should wrap value in success object', () => { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
171939
63
2848
235