Skip to content

Commit ea13d8a

Browse files
authored
Merge pull request #313 from MisterLuffy/master
feat: support less v4
2 parents 1a9d694 + 7ce4b9b commit ea13d8a

File tree

4 files changed

+61
-9
lines changed

4 files changed

+61
-9
lines changed

Diff for: .gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,5 @@ node_modules
1919
.travis.yml
2020
test
2121
examples
22+
.idea
23+
yarn.lock

Diff for: README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
</tr>
2323
<tr>
2424
<td>Less Version</td>
25-
<td>2.x | 3.7+</td>
25+
<td>3.7+ | 4.0+</td>
2626
</tr>
2727
<tr>
2828
<td>Gulp Version</td>

Diff for: index.js

+57-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,63 @@
1+
var fs = require('fs');
12
var path = require('path');
2-
var accord = require('accord');
3+
var less = require('less');
34
var through2 = require('through2');
45
var replaceExt = require('replace-ext');
56
var assign = require('object-assign');
67
var applySourceMap = require('vinyl-sourcemaps-apply');
78
var PluginError = require('plugin-error');
89

9-
var less = accord.load('less');
10+
function inlineSources(map) {
11+
if (map.sourcesContent) {
12+
return Promise.resolve(map);
13+
}
14+
15+
return Promise.all(
16+
map.sources.map(function (source) {
17+
return new Promise(function (resolve, reject) {
18+
fs.readFile(source, 'utf8', function (err, data) {
19+
if (err) {
20+
reject(err);
21+
} else {
22+
resolve(data);
23+
}
24+
});
25+
});
26+
})
27+
).then(
28+
function (contents) {
29+
map.sourcesContent = contents;
30+
return map;
31+
},
32+
function () {
33+
return map;
34+
}
35+
);
36+
}
37+
38+
function renderLess(str, opts) {
39+
return new Promise(function (resolve, reject) {
40+
less.render(str, opts, function (err, res) {
41+
if (err) {
42+
reject(err);
43+
} else {
44+
var obj = {
45+
result: res.css,
46+
imports: res.imports,
47+
};
48+
if (opts.sourceMap && res.map) {
49+
obj.sourcemap = JSON.parse(res.map);
50+
inlineSources(obj.sourcemap).then(function (map) {
51+
obj.sourcemap = map;
52+
resolve(obj);
53+
});
54+
} else {
55+
resolve(obj);
56+
}
57+
}
58+
});
59+
});
60+
}
1061

1162
module.exports = function (options) {
1263
// Mixes in default options.
@@ -15,7 +66,7 @@ module.exports = function (options) {
1566
paths: []
1667
}, options);
1768

18-
return through2.obj(function(file, enc, cb) {
69+
return through2.obj(function (file, enc, cb) {
1970
if (file.isNull()) {
2071
return cb(null, file);
2172
}
@@ -30,11 +81,11 @@ module.exports = function (options) {
3081
opts.filename = file.path;
3182

3283
// Bootstrap source maps
33-
if (file.sourceMap) {
34-
opts.sourcemap = true;
84+
if (file.sourceMap || opts.sourcemap) {
85+
opts.sourceMap = true;
3586
}
3687

37-
less.render(str, opts).then(function(res) {
88+
renderLess(str, opts).then(function(res) {
3889
file.contents = new Buffer(res.result);
3990
file.path = replaceExt(file.path, '.css');
4091
if (res.sourcemap) {

Diff for: package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
"author": "Chris Cowan",
2222
"license": "MIT",
2323
"dependencies": {
24-
"accord": "^0.29.0",
25-
"less": "2.6.x || ^3.7.1",
24+
"less": "^3.7.1 || ^4.0.0",
2625
"object-assign": "^4.0.1",
2726
"plugin-error": "^0.1.2",
2827
"replace-ext": "^1.0.0",

0 commit comments

Comments
 (0)