UNPKG

2.5 kBJavaScriptView Raw
1'use strict';
2/**
3 * @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
4 */
5/**
6 * @typedef {{msg: string, level: MESSAGE_LEVEL, file: string,line:number,column:number,startOffset:number,endOffset:number}} MESSAGE
7 */
8
9/**
10 * Enum for tri-state values.
11 * @enum {string}
12 */
13
14var MESSAGE_LEVEL = {
15 ERROR: 'ERROR',
16 WARN: 'WARN',
17 INFO: 'INFO'
18};
19
20var _ = require('lodash');
21var err = require('./RTCodeError');
22var norm = err.RTCodeError.norm;
23
24/**
25 * @type {CONTEXT}
26 */
27var context = {
28 /** @type {Array.<MESSAGE>} */
29 messages: [],
30 /** @type {boolean} */
31 color: true,
32 /** @type {string} */
33 cwd: process.cwd(),
34 report: function report(msg) {
35 console.log(msg);
36 },
37 verbose: function verbose(msg) {
38 if (context.options.verbose) {
39 console.log(msg);
40 }
41 },
42 info: function info(msg, file, line, column) {
43 context.issue(MESSAGE_LEVEL.INFO, msg, file, line, column);
44 },
45 warn: function warn(msg, file, line, column, startOffset, endOffset) {
46 context.issue(MESSAGE_LEVEL.WARN, msg, file, line, column, startOffset, endOffset);
47 },
48 error: function error(msg, file, line, column, startOffset, endOffset) {
49 context.issue(MESSAGE_LEVEL.ERROR, msg, file, line, column, startOffset, endOffset);
50 },
51
52 /**
53 * @param {MESSAGE_LEVEL} level
54 * @param {string} msg
55 * @param {string} file
56 * @param {number} line
57 * @param {number} column
58 * @param {number=} startOffset
59 * @param {number=} endOffset
60 */
61 issue: function issue(level, msg, file, line, column, startOffset, endOffset) {
62 context.messages.push({ level: level, msg: msg, file: file || null, line: norm(line), column: norm(column), index: norm(startOffset), startOffset: norm(startOffset), endOffset: norm(endOffset) });
63 },
64 getMessages: function getMessages() {
65 return context.messages;
66 },
67 clear: function clear() {
68 context.messages = [];
69 },
70 hasErrors: function hasErrors() {
71 return _.some(context.messages, { level: MESSAGE_LEVEL.ERROR });
72 },
73
74 options: {
75 verbose: false,
76 outFile: null,
77 format: 'stylish'
78 },
79 MESSAGE_LEVEL: MESSAGE_LEVEL
80};
81
82module.exports = context;
\No newline at end of file