1 | 'use strict';
|
2 |
|
3 | var through = require('through2');
|
4 | var stylus = require('accord').load('stylus');
|
5 | var rext = require('replace-ext');
|
6 | var extname = require('path').extname;
|
7 | var assign = require('lodash.assign');
|
8 | var PluginError = require('plugin-error');
|
9 | var applySourceMap = require('vinyl-sourcemaps-apply');
|
10 |
|
11 | function guErr(err) {
|
12 | return new PluginError('gulp-stylus', err);
|
13 | }
|
14 |
|
15 | module.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 |
|
61 | module.exports.stylus = require('stylus');
|