1 |
|
2 |
|
3 | 'use strict';
|
4 |
|
5 | var prefix = require('autoprefixer');
|
6 | var gutil = require('gulp-util');
|
7 | var transform = require('stream').Transform;
|
8 | var bufferstreams = require('bufferstreams');
|
9 | var PLUGIN_NAME = 'gulp-autoprefixer';
|
10 |
|
11 | function autoprefixerTransform(browsers, options) {
|
12 |
|
13 | return function (err, buffer, callback) {
|
14 | if (err) {
|
15 | callback(gutil.PluginError(PLUGIN_NAME, err));
|
16 | }
|
17 | var prefixed = prefix(browsers, options).process(String(buffer)).css;
|
18 | callback(null, new Buffer(prefixed));
|
19 | };
|
20 | }
|
21 |
|
22 | function gulpautoprefixer() {
|
23 | var stream = new transform({objectMode: true}),
|
24 | browsers,
|
25 | options;
|
26 |
|
27 | if (arguments.length) {
|
28 | var args = [].slice.call(arguments, 0);
|
29 |
|
30 | if (Array.isArray(args[0])) {
|
31 | browsers = args.shift();
|
32 | }
|
33 |
|
34 | var lastArg = args[args.length - 1];
|
35 | if ((typeof lastArg === 'object') && (lastArg !== null)) {
|
36 | options = args.pop();
|
37 | }
|
38 |
|
39 | if (!browsers && args.length) {
|
40 | browsers = args;
|
41 | }
|
42 | }
|
43 |
|
44 | stream._transform = function (file, unused, done) {
|
45 |
|
46 | if (file.isNull()) {
|
47 | stream.push(file);
|
48 | done();
|
49 | return;
|
50 | }
|
51 | if (file.isStream()) {
|
52 | try {
|
53 | file.contents = file.contents.pipe(new bufferstreams(autoprefixerTransform(browsers, options)));
|
54 | } catch (err) {
|
55 | err.fileName = file.path;
|
56 | stream.emit('error', new gutil.PluginError('gulp-autoprefixer', err));
|
57 | }
|
58 | stream.push(file);
|
59 | done();
|
60 | } else {
|
61 | try {
|
62 | var prefixed = prefix(browsers, options).process(String(file.contents)).css;
|
63 | file.contents = new Buffer(prefixed);
|
64 | } catch (err) {
|
65 | err.fileName = file.path;
|
66 | stream.emit('error', new gutil.PluginError('gulp-autoprefixer', err));
|
67 | }
|
68 | stream.push(file);
|
69 | done();
|
70 | }
|
71 | };
|
72 | return stream;
|
73 | }
|
74 |
|
75 | gulpautoprefixer.autoprefixerTransform = autoprefixerTransform;
|
76 | module.exports = gulpautoprefixer;
|