1
0
mirror of https://github.com/bobwen-dev/react-templates synced 2025-04-12 00:56:39 +02:00
react-templates/src/context.js
2016-04-27 14:04:35 +03:00

81 lines
2.3 KiB
JavaScript

'use strict';
/**
* @typedef {{color: boolean, cwd: string, report: function(string), issue: function(string, string,string,number,number,number=,number=), warn: function(string), verbose: function(string), getMessages: function():Array.<MESSAGE>, options:Options, messages: Array.<MESSAGE>}} CONTEXT
*/
/**
* @typedef {{msg: string, level: MESSAGE_LEVEL, file: string,line:number,column:number,startOffset:number,endOffset:number}} MESSAGE
*/
/**
* Enum for tri-state values.
* @enum {string}
*/
const MESSAGE_LEVEL = {
ERROR: 'ERROR',
WARN: 'WARN',
INFO: 'INFO'
};
const _ = require('lodash');
const err = require('./RTCodeError');
const norm = err.RTCodeError.norm;
/**
* @type {CONTEXT}
*/
const context = {
/** @type {Array.<MESSAGE>} */
messages: [],
/** @type {boolean} */
color: true,
/** @type {string} */
cwd: process.cwd(),
report(msg) {
console.log(msg);
},
verbose(msg) {
if (context.options.verbose) {
console.log(msg);
}
},
info(msg, file, line, column) {
context.issue(MESSAGE_LEVEL.INFO, msg, file, line, column);
},
warn(msg, file, line, column, startOffset, endOffset) {
context.issue(MESSAGE_LEVEL.WARN, msg, file, line, column, startOffset, endOffset);
},
error(msg, file, line, column, startOffset, endOffset) {
context.issue(MESSAGE_LEVEL.ERROR, msg, file, line, column, startOffset, endOffset);
},
/**
* @param {MESSAGE_LEVEL} level
* @param {string} msg
* @param {string} file
* @param {number} line
* @param {number} column
* @param {number=} startOffset
* @param {number=} endOffset
*/
issue(level, msg, file, line, column, startOffset, endOffset) {
context.messages.push({level, msg, file: file || null, line: norm(line), column: norm(column), index: norm(startOffset), startOffset: norm(startOffset), endOffset: norm(endOffset)});
},
getMessages() {
return context.messages;
},
clear() {
context.messages = [];
},
hasErrors() {
return _.some(context.messages, {level: MESSAGE_LEVEL.ERROR});
},
options: {
verbose: false,
outFile: null,
format: 'stylish'
},
MESSAGE_LEVEL
};
module.exports = context;