-
Notifications
You must be signed in to change notification settings - Fork 11
/
less.js
52 lines (44 loc) · 1.77 KB
/
less.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
var CSSPluginBase = require('css/css-plugin-base.js');
var JspmLessPlugin = require('./jspm-less-plugin.js');
var isWin = typeof process !== 'undefined' && process.platform.match(/^win/);
function fromFileURL(url) {
return url.substr(7 + !!isWin).replace(/\//g, isWin ? '\\' : '/');
}
module.exports = new CSSPluginBase(function compile(style, address, opts) {
var loader = this;
// use a file path in Node and a URL in the browser
var useNode = typeof process === 'object' && typeof process.versions.node === 'string';
var filename = useNode ? fromFileURL(address) : address,
lessPromise = useNode ? System.import('./bundled_less/less.node.js', module.id) : System.import('./bundled_less/less.browser.js', module.id);
return lessPromise
.then(function (less) {
return less.render(style, {
filename: filename,
rootFileInfo: {
filename: filename,
rootpath: !loader.builder && filename.replace(/[^/]+$/, ''),
paths: opts.fileAsRoot && [filename.replace(/[^/]+$/, '')],
relativeUrls: opts.relativeUrls || false,
rootFilename: filename,
entryPath: filename.replace(/[^/\\]*$/, ""),
currentDirectory: filename.replace(/[^/\\]*$/, "")
},
sourceMap: loader.builder && {
sourceMapBasepath: filename.replace(/[^/]+$/, '')
},
plugins: [new JspmLessPlugin({
prefix: 'jspm://'
})]
});
})
.then(function (output) {
return {
css: output.css + (loader.builder ? '' : ('/*# sourceURL=' + filename + '*/')),
map: output.map,
// style plugins can optionally return a modular module
// source as well as the stylesheet above
moduleSource: null,
moduleFormat: null
};
});
});