text: 'use strict';
  
  const path = require('path');
  const fs = require('fs');
  const mkdirp = require('mkdirp');
  
  const calcHash = require('../lib/hash');
  const paths = require('../lib/paths');
  const getFile = require('../lib/get-file');
  
  const getTargetDir = paths.getTargetDir;
  const getAssetsPath = paths.getAssetsPath;
  const normalize = paths.normalize;
  
  const getHashName = (file, options) =>
      (options && options.append ? (`${path.basename(file.path, path.extname(file.path))}_`) : '')
       + calcHash(file.contents, options)
       + path.extname(file.path);
  
  /**
   * Copy images from readed from url() to an specific assets destination
   * (`assetsPath`) and fix url() according to that path.
   * You can rename the assets by a hash or keep the real filename.
   *
   * Option assetsPath is require and is relative to the css destination (`to`)
   *
   * @type {PostcssUrl~UrlProcessor}
   * @param {PostcssUrl~Asset} asset
   * @param {PostcssUrl~Dir} dir
   * @param {PostcssUrl~Option} options
   * @param {PostcssUrl~Decl} decl
   * @param {Function} warn
   * @param {Result} result
   * @param {Function} addDependency
   *
   * @returns {String|Undefined}
   */
  module.exports = function processCopy(asset, dir, options, decl, warn, result, addDependency) {
      if (!options.assetsPath && dir.from === dir.to) {
          warn('Option `to` of postcss is required, ignoring');
  
          return;
      }
  
      const file = getFile(asset, options, dir, warn);
  
      if (!file) return;
  
      const assetRelativePath = options.useHash
          ? getHashName(file, options.hashOptions)
          : asset.relativePath;
  
      const targetDir = getTargetDir(dir);
      const newAssetBaseDir = getAssetsPath(targetDir, options.assetsPath);
      const newAssetPath = path.join(newAssetBaseDir, assetRelativePath);
      const newRelativeAssetPath = normalize(
          path.relative(targetDir, newAssetPath)
      );
  
      mkdirp.sync(path.dirname(newAssetPath));
  
      if (!fs.existsSync(newAssetPath)) {
          fs.writeFileSync(newAssetPath, file.contents);
      }
  
      addDependency(file.path);
  
      return `${newRelativeAssetPath}${asset.search}${asset.hash}`;
  };
  