9d5d7f3ec5125ef1f9b644d7c3d29764532d1803
[yaffs-website] / node_modules / grunt-uncss / node_modules / async / reflect.js
1 'use strict';
2
3 Object.defineProperty(exports, "__esModule", {
4     value: true
5 });
6 exports.default = reflect;
7
8 var _initialParams = require('./internal/initialParams');
9
10 var _initialParams2 = _interopRequireDefault(_initialParams);
11
12 var _rest = require('./internal/rest');
13
14 var _rest2 = _interopRequireDefault(_rest);
15
16 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
18 /**
19  * Wraps the function in another function that always returns data even when it
20  * errors.
21  *
22  * The object returned has either the property `error` or `value`.
23  *
24  * @name reflect
25  * @static
26  * @memberOf module:Utils
27  * @method
28  * @category Util
29  * @param {Function} fn - The function you want to wrap
30  * @returns {Function} - A function that always passes null to it's callback as
31  * the error. The second argument to the callback will be an `object` with
32  * either an `error` or a `value` property.
33  * @example
34  *
35  * async.parallel([
36  *     async.reflect(function(callback) {
37  *         // do some stuff ...
38  *         callback(null, 'one');
39  *     }),
40  *     async.reflect(function(callback) {
41  *         // do some more stuff but error ...
42  *         callback('bad stuff happened');
43  *     }),
44  *     async.reflect(function(callback) {
45  *         // do some more stuff ...
46  *         callback(null, 'two');
47  *     })
48  * ],
49  * // optional callback
50  * function(err, results) {
51  *     // values
52  *     // results[0].value = 'one'
53  *     // results[1].error = 'bad stuff happened'
54  *     // results[2].value = 'two'
55  * });
56  */
57 function reflect(fn) {
58     return (0, _initialParams2.default)(function reflectOn(args, reflectCallback) {
59         args.push((0, _rest2.default)(function callback(err, cbArgs) {
60             if (err) {
61                 reflectCallback(null, {
62                     error: err
63                 });
64             } else {
65                 var value = null;
66                 if (cbArgs.length === 1) {
67                     value = cbArgs[0];
68                 } else if (cbArgs.length > 1) {
69                     value = cbArgs;
70                 }
71                 reflectCallback(null, {
72                     value: value
73                 });
74             }
75         }));
76
77         return fn.apply(this, args);
78     });
79 }
80 module.exports = exports['default'];