all files / lib/theme/processor/ less.js

98.11% Statements 52/53
68.75% Branches 11/16
100% Functions 7/7
95.83% Lines 23/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62                                                                                
import isUndefined from 'lodash/isUndefined';
import fs from 'fs-extra';
import ProcessorBase from '../processor-base';
import less from 'less';
import LessPluginAutoPrefix from 'less-plugin-autoprefix';
import LessPluginCleanCSS from 'less-plugin-clean-css';
import LessPluginNpmImport from 'less-plugin-npm-import';
 
export default class Less extends ProcessorBase {
  _getFile() {
    // Derive source path from the input source file.
    let sourcePath = this.assetSource.split('/').slice(0, -1).join('/');
 
    let lessPlugins = [];
 
    // Add built-in plugins.
    lessPlugins.push(
      new LessPluginNpmImport({
        basedir: sourcePath
      })
    );
 
    Eif (this.plugins) {
      Eif (!isUndefined(this.plugins.autoprefixer)) {
        lessPlugins.push(
          new LessPluginAutoPrefix(this.plugins.autoprefixer || {})
        );
      }
      Eif (!isUndefined(this.plugins['clean-css'])) {
        lessPlugins.push(
          new LessPluginCleanCSS(this.plugins['clean-css'] || {})
        );
      }
    }
 
    let rawAsset = fs.readFileSync(this.assetSource, 'utf8');
 
    return new Promise((resolve, reject) => {
      less.render(rawAsset, {
        // Specify search paths for @import directives.
        paths: [sourcePath],
        plugins: lessPlugins
      }, (e, output) => {
        Iif (e) {
          return reject(e);
        }
 
        resolve(output.css);
      });
    });
  }
 
  _getDestination() {
    let destination = this.assetDestination.replace(
      /\.less$/,
      '.css'
    );
 
    return destination;
  }
}