55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
|
var path = require("path"),
|
||
|
PromiseConstructor = typeof Promise === 'undefined' ? require('promise') : Promise,
|
||
|
AbstractPluginLoader = require("../less/environment/abstract-plugin-loader.js");
|
||
|
|
||
|
/**
|
||
|
* Node Plugin Loader
|
||
|
*/
|
||
|
var PluginLoader = function(less) {
|
||
|
this.less = less;
|
||
|
this.require = require;
|
||
|
this.requireRelative = function(prefix) {
|
||
|
prefix = path.dirname(prefix);
|
||
|
return function(id) {
|
||
|
var str = id.substr(0, 2);
|
||
|
if (str === '..' || str === './') {
|
||
|
return require(path.join(prefix, id));
|
||
|
}
|
||
|
else {
|
||
|
return require(id);
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
PluginLoader.prototype = new AbstractPluginLoader();
|
||
|
|
||
|
PluginLoader.prototype.loadPlugin = function(filename, basePath, context, environment, fileManager) {
|
||
|
var self = this;
|
||
|
var prefix = filename.slice(0, 1);
|
||
|
var explicit = prefix === "." || prefix === "/" || filename.slice(-3).toLowerCase() === ".js";
|
||
|
if (!explicit) {
|
||
|
context.prefixes = ['less-plugin-', ''];
|
||
|
}
|
||
|
|
||
|
return new PromiseConstructor(function(fulfill, reject) {
|
||
|
fileManager.loadFile(filename, basePath, context, environment).then(
|
||
|
function(data) {
|
||
|
try {
|
||
|
self.require = self.requireRelative(data.filename);
|
||
|
fulfill(data);
|
||
|
}
|
||
|
catch (e) {
|
||
|
reject(e);
|
||
|
}
|
||
|
}
|
||
|
).catch(function(err) {
|
||
|
reject(err);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
};
|
||
|
|
||
|
module.exports = PluginLoader;
|
||
|
|