console-message.ts 1.9 KB
Newer Older
P
Peter Pan 已提交
1 2
/* eslint-disable no-console */

3
import {Config} from '../../types';
4
import NextI18Next from '../index';
P
Peter Pan 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

type MessageType = 'error' | 'info' | 'warn';

const messageTypes = {
    error: 'error',
    info: 'info',
    warn: 'warn'
};

Object.freeze(messageTypes);

const logMessage = (messageType: MessageType, message: string) => {
    if (Object.values(messageTypes).includes(messageType)) {
        console[messageType](message);
    } else {
        console.info(message);
    }
};

24
export const consoleMessage = function (
P
Peter Pan 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
    this: NextI18Next | void,
    messageType: MessageType,
    message: string,
    config?: Config
) {
    const {errorStackTraceLimit, strictMode} = config || (this as NextI18Next).config;

    const prevStackLimit = Error.stackTraceLimit;

    let util;

    if (!strictMode) {
        return;
    }

    if (process.env.NODE_ENV !== 'production') {
        util = require('util');
    } else {
        return;
    }

    /*
47 48 49
        Temporarily set the stacktrace to 0 or errorStackTraceLimit,
        in order to only display a message
    */
P
Peter Pan 已提交
50 51 52
    Error.stackTraceLimit = errorStackTraceLimit || 0;

    /*
53 54
        Make room for new message
    */
P
Peter Pan 已提交
55 56 57
    console.log();

    /*
58 59
        Make sure the message is a string
    */
P
Peter Pan 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
    if (typeof message !== 'string') {
        const metaError = new Error();
        metaError.name = 'Meta';
        metaError.message = `Param message needs to be of type: string. Instead, '${typeof message}' was provided.\n
------------------------------------------------\n
\u200b
        The provided ${typeof message}:\n
\u200b
          ${util.inspect(message, true, 8, true)}
\u200b
------------------------------------------------\n
    `;
        console.error(metaError);
        return;
    }

    /*
77 78
        Log the message to console
    */
P
Peter Pan 已提交
79 80 81
    logMessage(messageType, message);

    /*
82 83
        Reset stack limit
    */
P
Peter Pan 已提交
84 85
    Error.stackTraceLimit = prevStackLimit;
};