| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | 
							- var csstree = require('css-tree');
 
- var parse = csstree.parse;
 
- var compress = require('./compress');
 
- var generate = csstree.generate;
 
- function debugOutput(name, options, startTime, data) {
 
-     if (options.debug) {
 
-         console.error('## ' + name + ' done in %d ms\n', Date.now() - startTime);
 
-     }
 
-     return data;
 
- }
 
- function createDefaultLogger(level) {
 
-     var lastDebug;
 
-     return function logger(title, ast) {
 
-         var line = title;
 
-         if (ast) {
 
-             line = '[' + ((Date.now() - lastDebug) / 1000).toFixed(3) + 's] ' + line;
 
-         }
 
-         if (level > 1 && ast) {
 
-             var css = generate(ast);
 
-             // when level 2, limit css to 256 symbols
 
-             if (level === 2 && css.length > 256) {
 
-                 css = css.substr(0, 256) + '...';
 
-             }
 
-             line += '\n  ' + css + '\n';
 
-         }
 
-         console.error(line);
 
-         lastDebug = Date.now();
 
-     };
 
- }
 
- function copy(obj) {
 
-     var result = {};
 
-     for (var key in obj) {
 
-         result[key] = obj[key];
 
-     }
 
-     return result;
 
- }
 
- function buildCompressOptions(options) {
 
-     options = copy(options);
 
-     if (typeof options.logger !== 'function' && options.debug) {
 
-         options.logger = createDefaultLogger(options.debug);
 
-     }
 
-     return options;
 
- }
 
- function runHandler(ast, options, handlers) {
 
-     if (!Array.isArray(handlers)) {
 
-         handlers = [handlers];
 
-     }
 
-     handlers.forEach(function(fn) {
 
-         fn(ast, options);
 
-     });
 
- }
 
- function minify(context, source, options) {
 
-     options = options || {};
 
-     var filename = options.filename || '<unknown>';
 
-     var result;
 
-     // parse
 
-     var ast = debugOutput('parsing', options, Date.now(),
 
-         parse(source, {
 
-             context: context,
 
-             filename: filename,
 
-             positions: Boolean(options.sourceMap)
 
-         })
 
-     );
 
-     // before compress handlers
 
-     if (options.beforeCompress) {
 
-         debugOutput('beforeCompress', options, Date.now(),
 
-             runHandler(ast, options, options.beforeCompress)
 
-         );
 
-     }
 
-     // compress
 
-     var compressResult = debugOutput('compress', options, Date.now(),
 
-         compress(ast, buildCompressOptions(options))
 
-     );
 
-     // after compress handlers
 
-     if (options.afterCompress) {
 
-         debugOutput('afterCompress', options, Date.now(),
 
-             runHandler(compressResult, options, options.afterCompress)
 
-         );
 
-     }
 
-     // generate
 
-     if (options.sourceMap) {
 
-         result = debugOutput('generate(sourceMap: true)', options, Date.now(), (function() {
 
-             var tmp = generate(compressResult.ast, { sourceMap: true });
 
-             tmp.map._file = filename; // since other tools can relay on file in source map transform chain
 
-             tmp.map.setSourceContent(filename, source);
 
-             return tmp;
 
-         }()));
 
-     } else {
 
-         result = debugOutput('generate', options, Date.now(), {
 
-             css: generate(compressResult.ast),
 
-             map: null
 
-         });
 
-     }
 
-     return result;
 
- }
 
- function minifyStylesheet(source, options) {
 
-     return minify('stylesheet', source, options);
 
- }
 
- function minifyBlock(source, options) {
 
-     return minify('declarationList', source, options);
 
- }
 
- module.exports = {
 
-     version: require('../package.json').version,
 
-     // main methods
 
-     minify: minifyStylesheet,
 
-     minifyBlock: minifyBlock,
 
-     // css syntax parser/walkers/generator/etc
 
-     syntax: Object.assign({
 
-         compress: compress
 
-     }, csstree)
 
- };
 
 
  |