/* @flow */ "use strict"; /** * Given an object of violation messages, return another * that provides the same messages postfixed with the rule * that has been violated. * * @param {string} ruleName * @param {object} messages - Object whose keys are message identifiers * and values are either message strings or functions that return message strings * @return {object} New message object, whose messages will be marked with the rule name */ module.exports = function( ruleName /*: string*/, messages /*: Object*/ ) /*: Object*/ { return Object.keys(messages).reduce((newMessages, messageId) => { const messageText = messages[messageId]; if (typeof messageText === "string") { newMessages[messageId] = `${messageText} (${ruleName})`; } else { newMessages[messageId] = function() { return `${messageText.apply(null, arguments)} (${ruleName})`; }; } return newMessages; }, {}); };