@winstrike/next-i18next-koa
Version:
The easiest way to translate your NextJs apps. With Koa support only. Forked from 'next-i18next'.
80 lines (67 loc) • 1.97 kB
JavaScript
/* eslint-disable no-console */
/**
* @readonly
* @enum {String} A console.log type
*/
const messageTypes = {
error: 'error',
info: 'info',
warn: 'warn'
};
Object.freeze(messageTypes);
/**
* Logs a custom message to console
* @param {messageTypes} messageType One of: error, warn or info
* @param {String} message
*/
function logMessage(messageType, message) {
if (Object.values(messageTypes).includes(messageType)) {
console[messageType](message);
} else {
console.info(message);
}
}
/**
* Create a console log with specified log type, a message and options
* @param {messageTypes} messageType One of: error, warn or info
* @param {String} message
* @param {Object} options
*/
export default function createConsoleLog(messageType, message) {
const {
errorStackTraceLimit,
strictMode
} = this.config;
const prevStackLimit = Error.stackTraceLimit;
Error.stackTraceLimit = errorStackTraceLimit;
let util;
if (!strictMode) {
return;
}
if (process.env.NODE_ENV !== 'production') {
util = require('util');
} else {
return;
}
/* Temporarily set the stacktrace to 0 or errorStackTraceLimit,
in order to only display a message */
Error.errorStackTraceLimit = errorStackTraceLimit; // Make room for new message
console.log(); // Make sure the message is a string
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;
} // Log the message to console
logMessage(messageType, message); // Reset stack limit
Error.stackTraceLimit = prevStackLimit;
}