text: 'use strict';
  
  const _ = require('lodash');
  const fs = require('fs-extra');
  const uglify = require('uglify-js');
  
  const uglifyOptions = require('./uglify.options');
  
  /*----------------------------------------------------------------------------*/
  
  /**
   * Asynchronously minifies the file at `srcPath`, writes it to `destPath`, and
   * invokes `callback` upon completion. The callback is invoked with one argument:
   * (error).
   *
   * If unspecified, `destPath` is `srcPath` with an extension of `.min.js`.
   * (e.g. the `destPath` of `path/to/foo.js` would be `path/to/foo.min.js`)
   *
   * @param {string} srcPath The path of the file to minify.
   * @param {string} [destPath] The path to write the file to.
   * @param {Function} callback The function invoked upon completion.
   * @param {Object} [option] The UglifyJS options object.
   */
  function minify(srcPath, destPath, callback, options) {
    if (_.isFunction(destPath)) {
      if (_.isObject(callback)) {
        options = callback;
      }
      callback = destPath;
      destPath = undefined;
    }
    if (!destPath) {
      destPath = srcPath.replace(/(?=\.js$)/, '.min');
    }
    const output = uglify.minify(srcPath, _.defaults(options || {}, uglifyOptions));
    fs.writeFile(destPath, output.code, 'utf-8', callback);
  }
  
  module.exports = minify;
  