"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function (...args) {
    return function (...ignoredArgs /*, callback*/) {
        var callback = ignoredArgs.pop();
        return callback(null, ...args);
    };
};

module.exports = exports["default"]; /**
                                      * Returns a function that when called, calls-back with the values provided.
                                      * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to
                                      * [`auto`]{@link module:ControlFlow.auto}.
                                      *
                                      * @name constant
                                      * @static
                                      * @memberOf module:Utils
                                      * @method
                                      * @category Util
                                      * @param {...*} arguments... - Any number of arguments to automatically invoke
                                      * callback with.
                                      * @returns {AsyncFunction} Returns a function that when invoked, automatically
                                      * invokes the callback with the previous given arguments.
                                      * @example
                                      *
                                      * async.waterfall([
                                      *     async.constant(42),
                                      *     function (value, next) {
                                      *         // value === 42
                                      *     },
                                      *     //...
                                      * ], callback);
                                      *
                                      * async.waterfall([
                                      *     async.constant(filename, "utf8"),
                                      *     fs.readFile,
                                      *     function (fileData, next) {
                                      *         //...
                                      *     }
                                      *     //...
                                      * ], callback);
                                      *
                                      * async.auto({
                                      *     hostname: async.constant("https://server.net/"),
                                      *     port: findFreePort,
                                      *     launchServer: ["hostname", "port", function (options, cb) {
                                      *         startServer(options, cb);
                                      *     }],
                                      *     //...
                                      * }, callback);
                                      */