12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- var path = require("path");
- /**
- * Node Plugin Loader
- */
- var PluginLoader = function(less) {
- this.less = less;
- };
- PluginLoader.prototype.tryLoadPlugin = function(name, argument) {
- var plugin = this.tryRequirePlugin(name);
- if (plugin) {
- // support plugins being a function
- // so that the plugin can be more usable programmatically
- if (typeof plugin === "function") {
- plugin = new plugin();
- }
- if (plugin.minVersion) {
- if (this.compareVersion(plugin.minVersion, this.less.version) < 0) {
- console.log("plugin " + name + " requires version " + this.versionToString(plugin.minVersion));
- return null;
- }
- }
- if (argument) {
- if (!plugin.setOptions) {
- console.log("options have been provided but the plugin " + name + "does not support any options");
- return null;
- }
- try {
- plugin.setOptions(argument);
- }
- catch(e) {
- console.log("Error setting options on plugin " + name);
- console.log(e.message);
- return null;
- }
- }
- return plugin;
- }
- return null;
- };
- PluginLoader.prototype.compareVersion = function(aVersion, bVersion) {
- for (var i = 0; i < aVersion.length; i++) {
- if (aVersion[i] !== bVersion[i]) {
- return parseInt(aVersion[i]) > parseInt(bVersion[i]) ? -1 : 1;
- }
- }
- return 0;
- };
- PluginLoader.prototype.versionToString = function(version) {
- var versionString = "";
- for (var i = 0; i < version.length; i++) {
- versionString += (versionString ? "." : "") + version[i];
- }
- return versionString;
- };
- PluginLoader.prototype.tryRequirePlugin = function(name) {
- // is at the same level as the less.js module
- try {
- return require("../../../" + name);
- }
- catch(e) {
- }
- // is installed as a sub dependency of the current folder
- try {
- return require(path.join(process.cwd(), "node_modules", name));
- }
- catch(e) {
- }
- // is referenced relative to the current directory
- try {
- return require(path.join(process.cwd(), name));
- }
- catch(e) {
- }
- // unlikely - would have to be a dependency of where this code was running (less.js)...
- if (name[0] !== '.') {
- try {
- return require(name);
- }
- catch(e) {
- }
- }
- };
- PluginLoader.prototype.printUsage = function(plugins) {
- for (var i = 0; i < plugins.length; i++) {
- var plugin = plugins[i];
- if (plugin.printUsage) {
- plugin.printUsage();
- }
- }
- };
- module.exports = PluginLoader;
|