Начало наработок
This commit is contained in:
172
node_modules/tfunk/index.js
generated
vendored
Normal file
172
node_modules/tfunk/index.js
generated
vendored
Normal file
@ -0,0 +1,172 @@
|
||||
"use strict";
|
||||
|
||||
var chalk = require("chalk");
|
||||
var parser = require("./lib/parser");
|
||||
var dlv = require("dlv");
|
||||
|
||||
/**
|
||||
* Stateless compiler.
|
||||
* @param {String} string
|
||||
* @param {Object} [custom] - Any custom methods
|
||||
* @param {Object} [opts] - Options
|
||||
* @returns {String}
|
||||
*/
|
||||
function compile(string, custom, opts) {
|
||||
opts = opts || {};
|
||||
return parseAst(createAst(parser, string), custom, function (err) {
|
||||
if (err) {
|
||||
if (opts.logErrors) {
|
||||
console.log(err.msg);
|
||||
}
|
||||
if (opts.failOnError) {
|
||||
throw Error(err.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param parser
|
||||
* @param string
|
||||
* @returns {*}
|
||||
*/
|
||||
function createAst(parser, string) {
|
||||
return parser.parse(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ast
|
||||
* @param custom
|
||||
* @param {Function} cb
|
||||
*/
|
||||
function parseAst(ast, custom, cb) {
|
||||
|
||||
var colors = [];
|
||||
|
||||
return ast.reduce(function (joined, item) {
|
||||
|
||||
var fn;
|
||||
|
||||
if (item.color) {
|
||||
if (item.text) {
|
||||
if (fn = resolveFun(item.color, custom)) {
|
||||
colors.push(fn);
|
||||
return joined + fn(item.text);
|
||||
} else {
|
||||
cb({
|
||||
msg: "Method does not exist: " + item.color
|
||||
});
|
||||
return joined + item.text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (item.buffer) {
|
||||
return colors.length
|
||||
? joined + colors[colors.length-1](item.buffer)
|
||||
: joined + item.buffer;
|
||||
}
|
||||
|
||||
if (item.reset) {
|
||||
colors.pop();
|
||||
if (item.text) {
|
||||
return colors.length
|
||||
? joined + colors[colors.length-1](item.text)
|
||||
: joined + item.text;
|
||||
}
|
||||
}
|
||||
|
||||
return joined;
|
||||
|
||||
}, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param path
|
||||
* @param custom
|
||||
* @returns {*}
|
||||
*/
|
||||
function resolveFun(path, custom) {
|
||||
|
||||
var fn;
|
||||
if (fn = getFun(custom, path)) {
|
||||
return fn.bind({compile:compile});
|
||||
}
|
||||
|
||||
return getFun(chalk, path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a function from an object
|
||||
*/
|
||||
function getFun(obj, path) {
|
||||
|
||||
if (!obj) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return dlv(obj, path);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object} [opts]
|
||||
* @param {Object} custom
|
||||
* @returns {Compiler}
|
||||
*/
|
||||
function Compiler(custom, opts) {
|
||||
|
||||
opts = opts || {};
|
||||
custom = custom || {};
|
||||
|
||||
this.prefix = "";
|
||||
|
||||
if (typeof opts.prefix === "string") {
|
||||
this.prefix = compile(opts.prefix, custom, opts);
|
||||
}
|
||||
|
||||
if (typeof opts.prefix === "function") {
|
||||
this.prefix = opts.prefix;
|
||||
}
|
||||
|
||||
this.compile = function (string, noPrefix) {
|
||||
|
||||
var out = "";
|
||||
|
||||
if (!noPrefix) {
|
||||
|
||||
if (typeof this.prefix === "function") {
|
||||
out = this.prefix.apply({compile: compile}, [string, opts]);
|
||||
} else {
|
||||
out = this.prefix;
|
||||
}
|
||||
}
|
||||
|
||||
return out + compile(string, custom, opts);
|
||||
|
||||
};
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
module.exports = compile;
|
||||
module.exports.parse = function (string) {
|
||||
return createAst(parser, string);
|
||||
};
|
||||
module.exports.clean = function (string) {
|
||||
var ast = createAst(parser, string);
|
||||
return ast.reduce(function (joined, item) {
|
||||
if (item.color) {
|
||||
if (item.text) {
|
||||
return joined + item.text;
|
||||
}
|
||||
}
|
||||
if (item.buffer) {
|
||||
return joined + item.buffer;
|
||||
}
|
||||
if (item.reset) {
|
||||
return joined + item.text;
|
||||
}
|
||||
return joined;
|
||||
}, "");
|
||||
};
|
||||
module.exports.Compiler = Compiler;
|
||||
Reference in New Issue
Block a user