| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | /*! * gulp-csscomb | https://github.com/koistya/gulp-csscomb * Copyright (c) Konstantin Tarkus (@koistya). See LICENSE.txt */'use strict';var Comb = require('csscomb');var fs = require('fs');var gutil = require('gulp-util');var path = require('path');var through = require('through2');var PluginError = gutil.PluginError;// Constantsvar PLUGIN_NAME = 'gulp-csscomb';var SUPPORTED_EXTENSIONS = ['.css', '.sass', '.scss', '.less'];// Plugin level function (dealing with files)function Plugin(configPath, options) {  if (arguments.length == 1 && typeof configPath === 'object') {    options = configPath;    configPath = options.configPath;  } else if (arguments.length == 2 && typeof options === 'boolean') {    options = { verbose: options }; // for backward compatibility  }  options = options || {};  configPath = configPath || null;  var verbose = options.verbose || false;  //var lint = options.lint || false; // TODO: Report about found issues in style sheets  // Create a stream through which each file will pass  var stream = through.obj(function(file, enc, cb) {    if (file.isNull()) {      // Do nothing    } else if (file.isStream()) {      this.emit('error', new PluginError(PLUGIN_NAME, 'Streams are not supported!'));      return cb();    } else if (file.isBuffer() && SUPPORTED_EXTENSIONS.indexOf(path.extname(file.path)) !== -1) {      if (verbose) {        gutil.log(PLUGIN_NAME, 'Processing ' + gutil.colors.magenta(file.path));      }      if (configPath && !fs.existsSync(configPath)) {        this.emit('error', new PluginError(PLUGIN_NAME, 'Configuration file not found: ' + gutil.colors.magenta(configPath)));        return cb();      }      configPath = Comb.getCustomConfigPath(configPath || path.join(path.dirname(file.path), '.csscomb.json'));      var config = Comb.getCustomConfig(configPath);      if (verbose) {        gutil.log(PLUGIN_NAME, 'Using configuration file ' + gutil.colors.magenta(configPath));      }      var comb = new Comb(config || 'csscomb');      var syntax = options.syntax || file.path.split('.').pop();      try {        var output = comb.processString(          file.contents.toString('utf8'), {            syntax: syntax,            filename: file.path          });        file.contents = new Buffer(output);      } catch (err) {        this.emit('error', new PluginError(PLUGIN_NAME, file.path + '\n' + err));      }    }    // make sure the file goes through the next gulp plugin    this.push(file);    // tell the stream engine that we are done with this file    return cb();  });  // Return the file stream  return stream;}// Export the plugin main functionmodule.exports = Plugin;
 |