{"ast":null,"code":"'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = asyncify;\n\nvar _initialParams = require('./internal/initialParams');\n\nvar _initialParams2 = _interopRequireDefault(_initialParams);\n\nvar _setImmediate = require('./internal/setImmediate');\n\nvar _setImmediate2 = _interopRequireDefault(_setImmediate);\n\nvar _wrapAsync = require('./internal/wrapAsync');\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n *     async.apply(fs.readFile, filename, \"utf8\"),\n *     async.asyncify(JSON.parse),\n *     function (data, next) {\n *         // data is the result of parsing the text.\n *         // If there was a parsing error, it would have been caught.\n *     }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n *     async.apply(fs.readFile, filename, \"utf8\"),\n *     async.asyncify(function (contents) {\n *         return db.model.create(contents);\n *     }),\n *     function (model, next) {\n *         // `model` is the instantiated model object.\n *         // If there was an error, this function would be skipped.\n *     }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n *     var intermediateStep = await processFile(file);\n *     return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\n\n\nfunction asyncify(func) {\n  if ((0, _wrapAsync.isAsync)(func)) {\n    return function (...args\n    /*, callback*/\n    ) {\n      const callback = args.pop();\n      const promise = func.apply(this, args);\n      return handlePromise(promise, callback);\n    };\n  }\n\n  return (0, _initialParams2.default)(function (args, callback) {\n    var result;\n\n    try {\n      result = func.apply(this, args);\n    } catch (e) {\n      return callback(e);\n    } // if result is Promise object\n\n\n    if (result && typeof result.then === 'function') {\n      return handlePromise(result, callback);\n    } else {\n      callback(null, result);\n    }\n  });\n}\n\nfunction handlePromise(promise, callback) {\n  return promise.then(value => {\n    invokeCallback(callback, null, value);\n  }, err => {\n    invokeCallback(callback, err && err.message ? err : new Error(err));\n  });\n}\n\nfunction invokeCallback(callback, error, value) {\n  try {\n    callback(error, value);\n  } catch (err) {\n    (0, _setImmediate2.default)(e => {\n      throw e;\n    }, err);\n  }\n}\n\nmodule.exports = exports['default'];","map":{"version":3,"sources":["D:/Development/Work/CENOS/cenos-ui/node_modules/async/asyncify.js"],"names":["Object","defineProperty","exports","value","default","asyncify","_initialParams","require","_initialParams2","_interopRequireDefault","_setImmediate","_setImmediate2","_wrapAsync","obj","__esModule","func","isAsync","args","callback","pop","promise","apply","handlePromise","result","e","then","invokeCallback","err","message","Error","error","module"],"mappings":"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","sourcesContent":["'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = asyncify;\n\nvar _initialParams = require('./internal/initialParams');\n\nvar _initialParams2 = _interopRequireDefault(_initialParams);\n\nvar _setImmediate = require('./internal/setImmediate');\n\nvar _setImmediate2 = _interopRequireDefault(_setImmediate);\n\nvar _wrapAsync = require('./internal/wrapAsync');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n *     async.apply(fs.readFile, filename, \"utf8\"),\n *     async.asyncify(JSON.parse),\n *     function (data, next) {\n *         // data is the result of parsing the text.\n *         // If there was a parsing error, it would have been caught.\n *     }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n *     async.apply(fs.readFile, filename, \"utf8\"),\n *     async.asyncify(function (contents) {\n *         return db.model.create(contents);\n *     }),\n *     function (model, next) {\n *         // `model` is the instantiated model object.\n *         // If there was an error, this function would be skipped.\n *     }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n *     var intermediateStep = await processFile(file);\n *     return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\nfunction asyncify(func) {\n    if ((0, _wrapAsync.isAsync)(func)) {\n        return function (...args /*, callback*/) {\n            const callback = args.pop();\n            const promise = func.apply(this, args);\n            return handlePromise(promise, callback);\n        };\n    }\n\n    return (0, _initialParams2.default)(function (args, callback) {\n        var result;\n        try {\n            result = func.apply(this, args);\n        } catch (e) {\n            return callback(e);\n        }\n        // if result is Promise object\n        if (result && typeof result.then === 'function') {\n            return handlePromise(result, callback);\n        } else {\n            callback(null, result);\n        }\n    });\n}\n\nfunction handlePromise(promise, callback) {\n    return promise.then(value => {\n        invokeCallback(callback, null, value);\n    }, err => {\n        invokeCallback(callback, err && err.message ? err : new Error(err));\n    });\n}\n\nfunction invokeCallback(callback, error, value) {\n    try {\n        callback(error, value);\n    } catch (err) {\n        (0, _setImmediate2.default)(e => {\n            throw e;\n        }, err);\n    }\n}\nmodule.exports = exports['default'];"]},"metadata":{},"sourceType":"script"}