| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | const applySourceMap = require('vinyl-sourcemaps-apply');const CleanCSS = require('clean-css');const path = require('path');const PluginError = require('plugin-error');const through = require('through2');module.exports = (options, callback) => {  let _callback = callback || (o => undefined);  return through.obj(function (file, enc, cb) {    let _options = Object.assign({}, options || {});    if (file.isNull()) {      return cb(null, file);    }    if (file.isStream()) {      this.emit('error', new PluginError('gulp-clean-css', 'Streaming not supported!'));      return cb(null, file);    }    if (file.sourceMap) {      _options.sourceMap = JSON.parse(JSON.stringify(file.sourceMap));    }    const content = {      [file.path]: {styles: file.contents ? file.contents.toString() : ''}    };    if (!_options.rebaseTo && _options.rebase !== false) {      _options.rebaseTo = path.dirname(file.path);    }    new CleanCSS(_options).minify(content, (errors, css) => {      if (errors) {        return cb(errors.join(' '));      }      let details = {        'stats': css.stats,        'errors': css.errors,        'warnings': css.warnings,        'path': file.path,        'name': file.path.split(file.base)[1]      };      if (css.sourceMap) {        details['sourceMap'] = css.sourceMap;      }      _callback(details);      file.contents = new Buffer.from(css.styles);      if (css.sourceMap) {        const iMap = JSON.parse(css.sourceMap);        const oMap = Object.assign({}, iMap, {          file: path.relative(file.base, file.path),          sources: iMap.sources.map(mapSrc => path.relative(file.base, mapSrc))        });        applySourceMap(file, oMap);      }      cb(null, file);    });  });};
 |