UNPKG

1.7 kBJavaScriptView Raw
1'use strict';
2
3var through = require('through2');
4var stylus = require('accord').load('stylus');
5var rext = require('replace-ext');
6var extname = require('path').extname;
7var assign = require('lodash.assign');
8var PluginError = require('plugin-error');
9var applySourceMap = require('vinyl-sourcemaps-apply');
10
11function guErr(err) {
12 return new PluginError('gulp-stylus', err);
13}
14
15module.exports = function (options) {
16 var opts = assign({}, options);
17
18 return through.obj(function (file, enc, cb) {
19
20 if (file.isStream()) {
21 return cb(guErr('Streaming not supported'));
22 }
23 if (file.isNull()) {
24 return cb(null, file);
25 }
26 if (extname(file.path) === '.css') {
27 return cb(null, file);
28 }
29 if (file.sourceMap || opts.sourcemap) {
30 opts.sourcemap = assign({basePath: file.base}, opts.sourcemap);
31 }
32 if (file.data) {
33 opts.define = file.data;
34 }
35 opts.filename = file.path;
36
37 stylus.render(file.contents.toString(enc || 'utf-8'), opts)
38 .catch(function(err) {
39 delete err.input;
40 return cb(guErr(err));
41 })
42 .done(function(res) {
43 if (res == null) {
44 return;
45 }
46 if (res.result !== undefined) {
47 file.path = rext(file.path, '.css');
48 if (res.sourcemap) {
49 res.result = res.result.replace(/\/\*[@#][\s\t]+sourceMappingURL=.*?\*\/$/mg, '');
50 res.sourcemap.file = file.relative;
51 applySourceMap(file, res.sourcemap);
52 }
53 file.contents = Buffer.from(res.result);
54 return cb(null, file);
55 }
56 });
57 });
58
59};
60
61module.exports.stylus = require('stylus');