UNPKG

node-less

Version:

Less Compiler For Node

61 lines (50 loc) 1.94 kB
(function (module) { var Anonymous = require('./anonymous.js'), Variable = require('./variable.js'), Quoted = require('./quoted.js'), jsify = require('./jsify.js'); var JavaScript = function (string, index, escaped) { this.escaped = escaped; this.expression = string; this.index = index; }; JavaScript.prototype = { type: "JavaScript", eval: function (env) { var result, that = this, context = {}; var expression = this.expression.replace(/@\{([\w-]+)\}/g, function (_, name) { return jsify(new Variable('@' + name, that.index).eval(env)); }); try { expression = new(Function)('return (' + expression + ')'); } catch (e) { throw { message: "JavaScript evaluation error: `" + expression + "`" , index: this.index }; } for (var k in env.frames[0].variables()) { context[k.slice(1)] = { value: env.frames[0].variables()[k].value, toJS: function () { return this.value.eval(env).toCSS(); } }; } try { result = expression.call(context); } catch (e) { throw { message: "JavaScript evaluation error: '" + e.name + ': ' + e.message + "'" , index: this.index }; } if (typeof(result) === 'string') { return new Quoted('"' + result + '"', result, this.escaped, this.index); } else if (Array.isArray(result)) { return new Anonymous(result.join(', ')); } else { return new Anonymous(result); } } }; module.exports = JavaScript; })(module);