passy/autoprefixer-loader

View on GitHub
index.js

Summary

Maintainability
A
3 hrs
Test Coverage
var loaderUtils = require('loader-utils');
var autoprefixer = require('autoprefixer');
var postcss = require('postcss');
var path = require('path');
var safe = require('postcss-safe-parser');

module.exports = function (source, map) {
    if (this.cacheable) {
        this.cacheable();
    }

    var params = loaderUtils.parseQuery(this.query);

    if (params.browsers && !Array.isArray(params.browsers)) {
        params.browsers = params.browsers.split(',');
    }
    if (params.cascade === 'false') {
        params.cascade = false;
    }

    var options = {from: path.relative(this.options.context, this.resource)};
    if (params.safe) {
        delete params.safe;
        options.parser = safe;
    }

    var whitelist = {
        browsers: true,
        cascade: true,
        add: true,
        remove: true,
    };
    var unknownParams = [];
    for (var i in params) {
        if (!whitelist[i]) {
            unknownParams.push(i);
        }
    }
    if (unknownParams.length) {
        var warn = unknownParams.length === 1 ?
            'Autoprefixer-loader got this undocumented option: ' :
            'Autoprefixer-loader got these undocumented options: ';
        warn += unknownParams.join(', ');
        this.emitWarning(warn);
    }

    if (map) {
        options.map = {
            prev: map,
        };
    }

    var prefixer = autoprefixer(params);
    var processed = postcss([prefixer]).process(source, options);
    this.callback(null, processed.css, processed.map);
};